for (; curlog; curlog = xml_findnext(root, curlog, "groundspeak:log")) {
xml_tag* logpart = xml_findfirst(curlog, "groundspeak:type");
if (logpart) {
- gbfprintf(fd, "%s\n", logpart->cdata);
+ gbfprintf(fd, "%s\n", CSTR(logpart->cdata));
}
logpart = xml_findfirst(curlog, "groundspeak:date");
if (logpart) {
}
logpart = xml_findfirst(curlog, "groundspeak:finder");
if (logpart) {
- char* s = cet_str_utf8_to_any(logpart->cdata, global_opts.charset);
+ char* s = cet_str_utf8_to_any(CSTR(logpart->cdata), global_opts.charset);
gbfputs(s, fd);
xfree(s);
}
logpart = xml_findfirst(curlog, "groundspeak:text");
if (logpart) {
- char* s = cet_str_utf8_to_any(logpart->cdata, global_opts.charset);
+ char* s = cet_str_utf8_to_any(CSTR(logpart->cdata), global_opts.charset);
gbfprintf(fd, ", %s", s);
xfree(s);
}
...
fun:_ZN11QTextStreamC1EP9QIODevice
}
-
}
new_tag = new xml_tag;
- new_tag->tagname = xstrdup(CSTR(el));
+ new_tag->tagname = el;
attr_count = attr.size();
new_tag->attributes = (char**)xcalloc(sizeof(char*),2*attr_count+1);
static void
gpx_cdata(const QString& s)
{
- char** cdata;
+ QString* cdata;
xml_tag* tmp_tag;
cdatastr = s;
} else {
cdata = &(cur_tag->cdata);
}
- if (*cdata) {
- xfree(*cdata);
- }
- *cdata = xstrdup(CSTR(cdatastr));
+ *cdata = cdatastr;
}
static void
while (tag) {
writer->writeStartElement(tag->tagname);
- if (!tag->cdata && !tag->child) {
+ if (tag->cdata.isEmpty() && !tag->child) {
write_tag_attributes(tag);
// No children? Self-closing tag.
writer->writeEndElement();
} else {
write_tag_attributes(tag);
- if (tag->cdata) {
+ if (!tag->cdata.isEmpty()) {
writer->writeCharacters(tag->cdata);
}
if (tag->child) {
fprint_xml_chain(tag->child, wpt);
}
if (wpt && wpt->gc_data->exported.isValid() &&
- strcmp(tag->tagname, "groundspeak:cache") == 0) {
+ tag->tagname.compare("groundspeak:cache") == 0) {
writer->writeTextElement("time",
wpt->gc_data->exported.toPrettyString());
}
writer->writeEndElement();
}
- if (tag->parentcdata && tag->parentcdata[0]) {
+ if (!tag->parentcdata.isEmpty()) {
// FIXME: The length check is necessary to get line endings correct in our test suite.
// Writing the zero length string eats a newline, at least with Qt 4.6.2.
writer->writeCharacters(tag->parentcdata);
char** ap;
while (tag) {
- if (tag->cdata) {
- xfree(tag->cdata);
- }
if (tag->child) {
free_gpx_extras(tag->child);
}
- if (tag->parentcdata) {
- xfree(tag->parentcdata);
- }
- if (tag->tagname) {
- xfree(tag->tagname);
- }
if (tag->attributes) {
ap = tag->attributes;
logpart = xml_findfirst(curlog, "groundspeak:type");
if (logpart) {
- gbfprintf(file_out, "<span class=\"gpsbabellogtype\">%s</span> by ", logpart->cdata);
+ gbfprintf(file_out, "<span class=\"gpsbabellogtype\">%s</span> by ", CSTR(logpart->cdata));
}
logpart = xml_findfirst(curlog, "groundspeak:finder");
if (logpart) {
- char* f = html_entitize(logpart->cdata);
+ char* f = html_entitize(CSTR(logpart->cdata));
gbfprintf(file_out, "<span class=\"gpsbabellogfinder\">%s</span> on ", f);
xfree(f);
}
if (html_encrypt && encoded) {
s = rot13(logpart->cdata);
} else {
- s = xstrdup(logpart->cdata);
+ s = xstrdup(CSTR(logpart->cdata));
}
t = html_entitize(s);
/*
Support for Google Earth & Keyhole "kml" format.
- Copyright (C) 2005, 2006, 2007, 2008, 2009, 2010 Robert Lipe,
- robertlipe@gpsbabel.org
+ Copyright (C) 2005-2013 Robert Lipe, robertlipe@gpsbabel.org
Updates by Andrew Kirmse, akirmse at google.com
This program is free software; you can redistribute it and/or modify
return tmp;
}
-// Returns an allocated buffer that must be freed.
-char* kml_geocache_get_logs(const waypoint* wpt)
+QString kml_geocache_get_logs(const waypoint* wpt)
{
- char* r = xstrdup("");
+ QString r;
fs_xml* fs_gpx = (fs_xml*)fs_chain_find(wpt->fs, FS_GPX);
xml_tag* root = NULL;
// branches will always be taken.
logpart = xml_findfirst(curlog, "groundspeak:type");
if (logpart) {
- r = xstrappend(r, "<p><b>");
- r = xstrappend(r, logpart->cdata);
- r = xstrappend(r, "</b>");
+ r = r + "<p><b>" + logpart->cdata + "</b>";
}
logpart = xml_findfirst(curlog, "groundspeak:finder");
if (logpart) {
- r = xstrappend(r, " by ");
- r = xstrappend(r, logpart->cdata);
- // xfree( f );
+ r = r + " by " + logpart->cdata;
}
logpart = xml_findfirst(curlog, "groundspeak:date");
t.date().year(),
t.date().month(),
t.date().day());
- r = xstrappend(r, temp);
+ r += temp;
xfree(temp);
}
}
if (html_encrypt && encoded) {
s = rot13(logpart->cdata);
} else {
- s = xstrdup(logpart->cdata);
+ s = xstrdup(CSTR(logpart->cdata));
}
- r = xstrappend(r, "<br />");
+ r = r + "<br />";
t = html_entitize(s);
- r = xstrappend(r, t);
+ r = r + t;
xfree(t);
xfree(s);
}
- r = xstrappend(r, "</p>");
+ r += "</p>";
curlog = xml_findnext(root, curlog, "groundspeak:log");
}
return r;
char date_placed[100]; // Always long engough for a date.
const char* issues = "";
- char* logs;
writer->writeStartElement("Placemark");
kml_write_data_element("gc_icon", is);
kml_write_cdata_element("gc_short_desc", waypointp->gc_data->desc_short.utfstring);
kml_write_cdata_element("gc_long_desc", waypointp->gc_data->desc_long.utfstring);
- logs = kml_geocache_get_logs(waypointp);
+ QString logs = kml_geocache_get_logs(waypointp);
kml_write_cdata_element("gc_logs", logs);
- xfree(logs);
writer->writeEndElement(); // Close ExtendedData tag
class xml_tag {
public:
xml_tag() :
- tagname(NULL),
- cdata(NULL),
- parentcdata(NULL),
attributes(NULL),
parent(NULL),
sibling(NULL),
child(NULL) {}
- char* tagname;
- char* cdata;
- char* parentcdata;
+ QString tagname;
+ QString cdata;
+ QString parentcdata;
char** attributes;
xml_tag* parent;
xml_tag* sibling;
logpart = xml_findfirst(curlog, "groundspeak:type");
if (logpart) {
- gbfprintf(file_out, "%s by ", logpart->cdata);
+ gbfprintf(file_out, "%s by ", CSTR(logpart->cdata));
}
logpart = xml_findfirst(curlog, "groundspeak:finder");
if (logpart) {
- gbfprintf(file_out, "%s on ", logpart->cdata);
+ gbfprintf(file_out, "%s on ", CSTR(logpart->cdata));
}
logpart = xml_findfirst(curlog, "groundspeak:date");
if (txt_encrypt && encoded) {
s = rot13(logpart->cdata);
} else {
- s = xstrdup(logpart->cdata);
+ s = xstrdup(CSTR(logpart->cdata));
}
gbfprintf(file_out, "%s", s);
xml_tag* result = cur;
do {
result = xml_next(root, result);
- } while (result && case_ignore_strcmp(result->tagname, tagname));
+ } while (result && result->tagname.compare(tagname, Qt::CaseInsensitive));
return result;
}
char** ap;
while (tag) {
- if (tag->cdata) {
- xfree(tag->cdata);
- }
if (tag->child) {
free_gpx_extras(tag->child);
}
- if (tag->parentcdata) {
- xfree(tag->parentcdata);
- }
- if (tag->tagname) {
- xfree(tag->tagname);
- }
if (tag->attributes) {
ap = tag->attributes;
}
}
+// FIXME: at some point, this becomes a plain ole copy constructor.
static void
copy_xml_tag(xml_tag** copy, xml_tag* src, xml_tag* parent)
{
res = new xml_tag;
*copy = res;
- memcpy(res, src, sizeof(xml_tag));
- res->tagname = xstrdup(src->tagname);
- res->cdata = xstrdup(src->cdata);
- res->parentcdata = xstrdup(src->parentcdata);
+// memcpy(res, src, sizeof(xml_tag));
+ res->tagname = (src->tagname);
+ res->cdata = (src->cdata);
+ res->parentcdata = (src->parentcdata);
if (src->attributes) {
ap = src->attributes;
while (*ap) {